package com.nuoniu.sibanyun.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nuoniu.sibanyun.common.exception.NuoNiuException;
import com.nuoniu.sibanyun.entity.SysMenu;
import com.nuoniu.sibanyun.entity.SysModule;
import com.nuoniu.sibanyun.entity.dto.ModuleSearchDto;
import com.nuoniu.sibanyun.mapper.SysMenuMapper;
import com.nuoniu.sibanyun.mapper.SysModuleMapper;
import com.nuoniu.sibanyun.service.ISysModuleService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * 模块表 服务实现类
 * </p>
 *
 * @author baiqiang
 * @since 2020-05-13
 */
@Service
public class SysModuleServiceImpl extends ServiceImpl<SysModuleMapper, SysModule> implements ISysModuleService {

    @Autowired
    private SysMenuMapper sysMenuMapper;

    @Override
    public Page<SysModule> listModule(ModuleSearchDto moduleSearchDto) {
        SysModule sysModule = new SysModule();
        QueryWrapper<SysModule> queryWrapper = new QueryWrapper<>(sysModule);
        if(StringUtils.isNotBlank(moduleSearchDto.getModuleName())){
            queryWrapper.like("module_name", moduleSearchDto.getModuleName());
        }
        queryWrapper.ne("status",1);
        Page page = page(moduleSearchDto.getPage(), queryWrapper);
        return page;
    }

    @Override
    public void deleteModule(Integer id) {
        SysModule sysModule = this.baseMapper.selectById(id);
        if(sysModule != null) {
            List<SysMenu> menuList = sysMenuMapper.getByModule(sysModule.getModuleCode());
            if(menuList.size() > 0) {
                throw new NuoNiuException("该模块下有菜单正在使用中");
            }
            UpdateWrapper<SysModule> updateWrapper = new UpdateWrapper();
            updateWrapper.eq("id",id);
            updateWrapper.set("status",1);
            update(updateWrapper);
        }else {
            throw new NuoNiuException("删除失败，参数错误");
        }
    }

    @Override
    @Transactional
    public void saveModel(SysModule sysModule) {
        if(sysModule.getId() != null && sysModule.getStatus() != null) {
            Integer status = sysModule.getStatus() == 0 ? 0 : 2;
            sysMenuMapper.updateStatus(sysModule.getModuleCode(), status);
        }
        if(sysModule.getId() != null) {
            SysModule module = getById(sysModule.getId());
            if(!module.getModuleCode().equals(sysModule.getModuleCode())) {
                sysMenuMapper.updateModule(sysModule.getModuleCode(), module.getModuleCode());
            }
        }
        this.saveOrUpdate(sysModule);
    }
}
